package edu.hunau.cxb.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 工厂类
 * 
 * 根据properties文件中的key,获得对应的value.通过反射实例化对象
 * 
 * @author hb
 *
 *         2020-04-28 16:16:14
 */
public class FactoryUtils {
	// Properties本质就是一个Map<String,String>,可以读取properties文件
	private static Properties pros = new Properties();
	static {
		// 利用返回获得类加载器,通过类加载器读取src目录下面的factory.properties文件.
		InputStream io = FactoryUtils.class.getClassLoader().getResourceAsStream("factory.properties");
		try {
			pros.load(io);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	public static Object newInstance(String key) {
		String value = pros.getProperty(key);
		// 通过类的全限定名获得类对象
		try {
			Class clazz = Class.forName(value.trim());
			// 通过无参数构造器实例化对象
			return clazz.getDeclaredConstructor().newInstance();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}
